var snapper;
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-48568685-1']);

if(monaca.isIOS === true){
    // check viewport plugin
    monaca.viewport({width : 320});
}

function IndexController(){ }
 
IndexController.prototype.handleSnapperAction = function() {
    if (Util.prototype.isSnapperClosed()) {
        snapper.open('left');
    } else {
        snapper.close();
    }
};

IndexController.prototype.freeMemory = function () {
    $("#pageTopBookmarkList").html('').listview('refresh');
};
  
$(function(){    
    
    /**
     * このイベントは Cordova が完全にロードされたときに呼び出されます。
     */ 
    document.addEventListener ("deviceready", function onDeviceReady () {
        Util.prototype.showSpinner();
        var db = Connection.prototype.openDb();
        db.transaction(function(tr){
            // Genres
            tr.executeSql(GenresService.prototype.createGenresSQL(), [],  function(tx, results){
                GenresService.prototype.checkEmpty(tx);
            }, BookmarksService.prototype.errorCallBack);
            // Prefectures
            tr.executeSql(PrefecturesService.prototype.createPrefecturesSQL(), [],  function(tx, results){
                PrefecturesService.prototype.checkEmpty(tx);
            }, BookmarksService.prototype.errorCallBack);
            // Keywords
            tr.executeSql(KeywordsService.prototype.createKeywordsSQL());
            // Bookmarks
            tr.executeSql(BookmarksService.prototype.createBookmarksSQL());
            // Bookmarks_Keywords
            tr.executeSql(Bookmarks_keywordsService.prototype.createBookmarks_keywordSQL());
            
        }, BookmarksService.prototype.errorCallBack, function() {
            console.log("Load Cordova Done");
            TestDataBuilder.prototype.build(function() {
                drawPageHome();
            });
        });
        
        monaca.getDeviceId(function(id){
           DetailProductService.prototype.DEVICE_ID = id;
        });
        
        _gaq.push(['_trackPageview', $.mobile.activePage.jqmData('url')]);
        
        $(document).on('pageshow', ':jqmData(role="page")', function(event) {
            _gaq.push(['_trackPageview', $.mobile.activePage.jqmData('url')]);
        });
    }, false);

    $(document).on('pagebeforeshow', '#pageHome', function(){
        PageChangeController.prototype.freeMemory();
        drawPageHome();        
    });
    
    function drawPageHome() {     
        // monaca.updateUIStyle("header", "title", "あとでかう");
        monaca.updateUIStyle("titlelable", "text", "あとでかう");
        monaca.updateUIStyle("backheader", "visibility", "false");
        monaca.updateUIStyle("footer", "visibility", "true");
        Util.prototype.showEditIcon();
        
        Util.prototype.changeSnapperElement("content");
        
        $('.tutorial').hide();
        
        var listview = $("#pageTopBookmarkList");
        listview.html("");
           
        //ホーム画面遷移時は最近のブックマークを表示する
        $('#topChoice').val('recentBookmarks').selectmenu('refresh');
        ProductListLoader.prototype.initLoadTopBookMark();
        
        ProductListLoader.prototype.loadProducts(listview, $(".home-pull"), null, null);
    }
        
    
    $('#topChoice').change(function(){
        if ($(document).data('loading')) {
            return;
        }
        Util.prototype.showSpinner();  
        var selected = $(this).val();
        var listview = $("#pageTopBookmarkList");
        $('.tutorial').hide();
        monaca.retrieveUIStyle("footer", "visibility", function(value) {
            if (value == "false") {
                monaca.updateUIStyle("footer", "visibility", "true");
                Util.prototype.showEditIcon();
            }
        });
        
        listview.html("");
        if (selected === 'recentBookmarks'){
            ProductListLoader.prototype.initLoadTopBookMark();
        } else{
            ProductListLoader.prototype.initLoadTopScan();
        }
        ProductListLoader.prototype.loadProducts(listview, $(".home-pull"), null, null); 
    });
    
    $(document).on('tap', '.snap-drawer .menu', function(){
        PageChangeController.prototype.changeToPage($(this).attr("target"));
    });

    $(document).on('tap', '.snap-drawer #mn-barcodescan', function(){
        snapper.close();
        ScanService.prototype.scanStart();
    });
    
    /**
     * このイベントはアプリケーションがオンラインになったとき、つまりデバイスがインターネットに接続されたときに呼び出されます。
     * 
     * デバイスがネットワークに接続され、アプリケーションがインターネットへ接続できる状態になった時に online イベントが呼び出されます。
     * このイベントは Connection API と同じ情報を利用しており、 connection.type の値が NONE から他の値へ変わった時に呼び出されます。
     * 通常は、 Cordova の ‘deviceready’ イベントを受け取った後、 document.addEventListener を通じてイベントリスナーを登録します。
     */
    // document.addEventListener("online", function() {
    //     
    // }, false);
    
    /**
     * このイベントはアプリケーションがオフラインになったとき、つまりデバイスのインターネット接続が切れたときに呼び出されます。
     * 
     * デバイスのネットワーク接続が切れ、アプリケーションがインターネットへアクセスできなくなったとき、 offline イベントが呼び出されます。
     * このイベントは Connection API と同じ情報を利用しており、 connection.type の値が NONE に変わった時に呼び出されます。
     * 通常は、 deviceready イベントを受け取った後、 document.addEventListener を通じてイベントリスナーを登録します。
     */ 
    document.addEventListener("offline", function() {
        // check is connecting to server
        if (Util.prototype.serverConnecting) {
            Util.prototype.serverConnecting = false;
            Util.prototype.hideSpinner();
            Util.prototype.alertInternet();
        }
    }, false);
    
    /**
     * このイベントはユーザーが Android の検索ボタンを押したときに呼び出されます。
     */ 
    document.addEventListener("searchbutton", function() {
        PageChangeController.prototype.changeToPage('pageItemSearch');
    }, false);
});